package com.csun.cmny.provider.service;

import com.csun.cmny.base.dto.LoginAuthDto;
import com.csun.cmny.core.support.IService;
import com.csun.cmny.provider.model.domain.UacDept;
import com.csun.cmny.provider.model.vo.DeptVo;

import java.util.List;

/**
 * @Auther: chisj chisj@foxmal.com
 * @Date: 2018-12-13 09:45
 * @Description:
 */
public interface UacDeptService extends IService<UacDept> {

    List<DeptVo> getDeptVoAll(Long groupId);

    /**
     * 通过组织Id获取部门列表
     *
     * @param groupId   部门Id
     *
     * @return  组织Id的部门列表
     */
    DeptVo getDeptVoList(Long groupId);

    /**
     * 保存部门信息
     *
     * @param uacDept       部门信息
     * @param loginAuthDto  用户登录信息
     *
     * @return  影响条数
     */
    int saveUacDept(UacDept uacDept, LoginAuthDto loginAuthDto);

    /**
     * 根据部门Id删除部门信息
     *
     * @param id            部门Id
     * @param loginAuthDto  用户登录信息
     *
     * @return  影响条数
     */
    int deleteUacDeptById(Long id, LoginAuthDto loginAuthDto);

    /**
     * 启用部门
     *
     * @param deptList      部门列表
     * @param loginAuthDto  用户登录信息
     *
     * @return  影响条数
     */
    int enableDeptList(List<UacDept> deptList, LoginAuthDto loginAuthDto);

    /**
     * 获取部门Id所有的父级部门信息
     *
     * @param id 部门Id
     *
     * @return  根据部门id查询出来的父级部门信息
     */
    List<UacDept> getAllParentDeptByDeptId(Long id);

    /**
     * 获取所有部门的子部门信息
     *
     * @param id            部门Id
     * @param deptStatus    部门状态
     * @return  根据部门Id查询所有的子部门信息
     */
    List<UacDept> getAllChildDeptByDeptId(Long id, String deptStatus);

    /**
     * 禁用部门
     *
     * @param deptList      部门列表
     * @param loginAuthDto  用户登录信息
     * @return  影响条数
     */
    int disableDeptList(List<UacDept> deptList, LoginAuthDto loginAuthDto);

    /**
     * 查询部门列表
     *
     * @param uacDept 查询条件
     *
     * @return  结果列表
     */
    List<UacDept> selectDeptList(UacDept uacDept);

    /**
     * 判断部门是否有子部门
     *
     * @param deptId 部门Id
     *
     * @return  结果
     */
    boolean checkDeptHasChildDept(Long deptId);


}
